#ifndef __SE_ACCEPTOR_HPP__
#define __SE_ACCEPTOR_HPP__

#include "Socket.hpp"
#include "SocketAddress.hpp"

namespace se {

class Acceptor {
public:
    Acceptor(const char *ip, unsigned short port);

    /**
     * @brief 接收TCP连接
     * 
     * @return int TCP连接对应套接口的文件描述符
     */
    int accept();

    /**
     * @brief 获取监听套接口的文件描述符
     * 
     * @return int 
     */
    int getFileDescriptor() const;

private:
    /**
     * @brief 设置套接口可重用
     * 
     * @param __optname 可以为 SO_REUSEADDR 或 SO_REUSEPORT ，分别代表地址可重用和端口可重用
     */
    void setReuse(int __optname);

private:
    SocketAddress _socketAddress;  // 套接口地址
    Socket _socket;  // 套接口
};

}  // namespace se

#endif